#include "LoginPage.h"

LoginPage::LoginPage(QWidget *parent)
    : QWidget{parent}
{
    // 设置背景颜色和字体
    setStyleSheet("background-color: #f5f5f5; font-family: Arial;");

    // 标题
    QLabel *titleLabel = new QLabel("请登录", this);
    titleLabel->setStyleSheet("font-size: 24px; color: #333; font-weight: bold;");
    titleLabel->setAlignment(Qt::AlignCenter);

    // 账号输入框
    accountEdit = new QLineEdit(this);
    accountEdit->setPlaceholderText("账号");
    accountEdit->setStyleSheet("height: 40px; padding: 8px; border: 1px solid #ccc; border-radius: 4px;");

    // 密码输入框
    passwordEdit = new QLineEdit(this);
    passwordEdit->setPlaceholderText("密码");
    passwordEdit->setEchoMode(QLineEdit::Password);
    passwordEdit->setStyleSheet("height: 40px; padding: 8px; border: 1px solid #ccc; border-radius: 4px;");

    // 登录注册
    QHBoxLayout *loginLayout = new QHBoxLayout;
    QPushButton *loginButton = new QPushButton("登录", this);
    loginButton->setStyleSheet(
        "height: 40px; background-color: #007bff; color: white; border: none; border-radius: 4px;"
        "font-size: 16px; font-weight: bold;");
    loginButton->setCursor(Qt::PointingHandCursor);
    QPushButton *registerButton = new QPushButton("前往注册", this);
    registerButton->setStyleSheet(
        "height: 40px; background-color: #007bff; color: white; border: none; border-radius: 4px;"
        "font-size: 16px; font-weight: bold;");
    registerButton->setCursor(Qt::PointingHandCursor);
    loginLayout->addWidget(loginButton);
    loginLayout->addWidget(registerButton);

    // 布局
    QVBoxLayout *layout = new QVBoxLayout(this);
    layout->addStretch(1); // 上方留白
    layout->addWidget(titleLabel);
    layout->addSpacing(20); // 标题与输入框之间的间距
    layout->addWidget(accountEdit);
    layout->addSpacing(10); // 输入框之间的间距
    layout->addWidget(passwordEdit);
    layout->addSpacing(20); // 输入框与按钮之间的间距
    layout->addLayout(loginLayout);
    layout->addStretch(1);                      // 下方留白
    layout->setContentsMargins(40, 40, 40, 40); // 页面边距
    setLayout(layout);

    // 连接登录按钮点击事件
    connect(loginButton, &QPushButton::clicked, this, &LoginPage::handleLogin);
    connect(registerButton, &QPushButton::clicked, this, &LoginPage::goToRegister);
}

void LoginPage::handleLogin()
{
    QString account = accountEdit->text();
    QString password = passwordEdit->text();

    // 账号校验正则表达式
    QRegularExpression accountRegex(R"(^(?!.*\.\.)(?!.*\.$)[^\W][\w.]{0,29}$)"); // 用户名可以包含字符 a-z、0-9、下划线和句点；用户名不能以句点开头，也不能以句点结尾；不能按顺序具有多个期间；最大长度为 30 个字符。

    // 密码校验正则表达式
    QRegularExpression passwordRegex(R"(^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[a-zA-Z]).{8,}$)"); // 至少8个字符，至少包含1个大写字母、1个小写字母和1个数字，可以包含特殊字符

    if (account.isEmpty() || password.isEmpty())
    {
        QMessageBox::warning(this, "提示", "账号和密码不能为空");
        return;
    }

    // 判断账号是否符合任意一个规则
    if (!QRegularExpressionMatch(accountRegex.match(account)).hasMatch())
    {
        QMessageBox::warning(this, "提示", "用户名可以包含字符 a-z、0-9、下划线和句点；用户名不能以句点开头，也不能以句点结尾；不能按顺序具有多个期间；最大长度为 30 个字符。");
        return;
    }

    // 判断密码是否合法
    if (!QRegularExpressionMatch(passwordRegex.match(password)).hasMatch())
    {
        QMessageBox::warning(this, "提示", "密码至少8个字符；至少包含1个大写字母、1个小写字母和1个数字；可以包含特殊字符。");
        return;
    }

    emit loginAttempted(account, password);
}
